﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace Game
{
    class Tileset
    {
        #region Initialisieren
        //Tileliste
        public List<Tile> tiles = new List<Tile>();
        
        //Konstruktor wird nur genutzt um die verschiedenen Tiles zu erstellen
        public Tileset()
        {
            int id = 2;

            for(int t = 0; t < 12; t++)
                tiles.Add(new Tile(new Point(t, 0), (id++).ToString(), true, "Seitenelemente"));

            for (int t = 0; t < 9; t++)
                tiles.Add(new Tile(new Point(t, 1), (id++).ToString(), true, "Eckelemente"));

            for (int t = 0; t < 6; t++)
                tiles.Add(new Tile(new Point(t, 4), (id++).ToString(), true, "Eckelemente Außen"));

            for (int t = 6; t < 11; t++)
                tiles.Add(new Tile(new Point(t, 4), (id++).ToString(), true, "Übergangselemente"));


            for (int t = 0; t < 16; t++)
                tiles.Add(new Tile(new Point(t, 3), (id++).ToString(), true, "Wandelemente"));

            for (int t = 8; t < 13; t++)
                tiles.Add(new Tile(new Point(t, 2), (id++).ToString(), true, "Kurvenelemente"));

            for (int t = 13; t < 15; t++)
                tiles.Add(new Tile(new Point(t, 2), (id++).ToString(), true, "Schlusselemente"));

            for (int t = 0; t < 8; t++)
                tiles.Add(new Tile(new Point(t, 2), (id++).ToString(), true, "4 Weg Gabelungselemente"));

            for (int t = 11; t < 16; t++)
                tiles.Add(new Tile(new Point(t, 4), (id++).ToString(), true, "3 Weg Gabelungselemente"));

            for (int t = 0; t < 16; t++)
                tiles.Add(new Tile(new Point(t, 5), (id++).ToString(), true, "Sonderelemente"));


            tiles.Add(new Tile(new Point(15, 2), (1).ToString(), true, "Sonderelemente"));


            for (int t = 0; t < 12; t++)
                tiles.Add(new Tile(new Point(t, 6), (id++).ToString(), false, "Hintergrund Seitenelemente"));

            for (int t = 0; t < 9; t++)
                tiles.Add(new Tile(new Point(t, 7), (id++).ToString(), false, "Hintergrund Eckelemente"));

            for (int t = 0; t < 6; t++)
                tiles.Add(new Tile(new Point(t, 10), (id++).ToString(), false, "Hintergrund Eckelemente Außen"));

            for (int t = 6; t < 11; t++)
                tiles.Add(new Tile(new Point(t, 10), (id++).ToString(), false, "Hintergrund Übergangselemente"));



            for (int t = 0; t < 16; t++)
                tiles.Add(new Tile(new Point(t, 9), (id++).ToString(), false, "Hintergrund Wandelemente"));

            for (int t = 8; t < 13; t++)
                tiles.Add(new Tile(new Point(t, 8), (id++).ToString(), false, "Hintergrund Kurvenelemente"));

            for (int t = 13; t < 15; t++)
                tiles.Add(new Tile(new Point(t, 8), (id++).ToString(), false, "Hintergrund Schlusselemente"));

            for (int t = 0; t < 8; t++)
                tiles.Add(new Tile(new Point(t, 8), (id++).ToString(), false, "Hintergrund 4 Weg Gabelungselemente"));

            for (int t = 11; t < 16; t++)
                tiles.Add(new Tile(new Point(t, 10), (id++).ToString(), false, "Hintergrund 3 Weg Gabelungselemente"));

            for (int t = 0; t < 16; t++)
                tiles.Add(new Tile(new Point(t, 11), (id++).ToString(), false, "Hintergrund Sonderelemente"));

            tiles.Add(new Tile(new Point(15, 8), (id++).ToString(), false, "Hintergrund Sonderelemente"));


        }
        #endregion

        #region Tools

        //Gibt eine zufällige TileId aus einer Gruppe zurück
        public Tile getRandomGroupID(Tile tl)
        {
            string group = tl.Group;
            List<Tile> groupTiles = new List<Tile>();

            if (group == "none")
                return tl;

            foreach (Tile t in tiles)
                if (t.Group == group)
                    groupTiles.Add(t);

            int randomIndex = Session.rand.Next(0, groupTiles.Count);

            return groupTiles[randomIndex];
        }

        //Gibt ein Tile Objekt basierend auf seine ID zurück
        public Tile getTileByID(string id)
        {
            //Tile liste nach ID Durchsuchen
            foreach(Tile t in tiles)
                if(t.getID() == id)
                    return t;

            return null;
        }

        #endregion
    }
}
